<script>
async function setup() {
  await navigator.serviceWorker.register('fetch_from_service_worker.js');
  await navigator.serviceWorker.ready;
  return 'ready';
}

function fetch_from_service_worker(url) {
  return new Promise(async resolve => {
    const registration = await navigator.serviceWorker.ready;
    const channel = new MessageChannel();
    channel.port1.onmessage = e => { resolve(e.data); };
    registration.active.postMessage({url}, [channel.port2]);
  });
}
</script>
